//=======================================================
// 作者：KingSley
// 描述：使用资源管理器的客户端
//=======================================================
using UnityEngine;
using System.Collections;

/// <summary>
/// 额外内容补充：
/// abstract
/// 修饰符指示所修饰的内容缺少实现或未完全实现，不能实例化，
/// 在抽象类中的成员必须通过从抽象类派生的类来实现
/// 
/// override
/// 方法提供从基类继承的成员的新实现，由override声明重写的方法称为重写基方法，
/// 重写的基方法必须与override方法具有相同的签名，
/// 不能重写非虚方法或静态方法，
/// 重写的基方法必须是virtual、abstract或override的。
/// 
/// virtual
/// 用于修饰方法、属性、索引器或事件声明，并使它们可以在派生类中被重写。
/// 虚拟成员的实现可由派生类中的重写成员更改。
/// </summary>

namespace Factory
{
    public class ResourceAbstractFactoryClient : MonoBehaviour
    {
        // 抽象工厂，用于初始化抽象资源对象
        ResourceAbstractFactory rfPrimary;
        // 抽象资源类对象
        AudioResoucesAbstract audioPrimry;
        UIResourceAbstract uiPrimary;

        ResourceAbstractFactory rfAssistant;
        AudioResoucesAbstract audioAssistant;
        UIResourceAbstract uiAssistant;

        void Start()
        {
            // 将抽象工厂类对象初始化为具体工厂类
            rfPrimary = new PrimaryManagerFactory();
            rfAssistant = new AssistantManagerFactory();
        }

        void OnGUI()
        {
            // 初始化抽象资源类对象，并调用具体资源类工厂方法
            if (GUI.Button(new Rect(50, 250, 150, 50), "主城产品族"))
            {
                // 通过具体工厂类的工厂方法创建具体资源类对象并赋值给抽象资源类对象
                audioPrimry = rfPrimary.CreateAudioManager();
                audioPrimry.LoadConfig("主城");
                audioPrimry.LoadAsset("产品族");
                audioPrimry.UnLoadResource(false);

                uiPrimary = rfPrimary.CreateUIManager();
                uiPrimary.LoadConfig("主城");
                uiPrimary.LoadAsset("产品族");
                uiPrimary.UnLoadResource(false);
            }
            if (GUI.Button(new Rect(50, 350, 150, 50), "副城产品族"))
            {
                audioAssistant = rfAssistant.CreateAudioManager();
                audioAssistant.LoadConfig("副城");
                audioAssistant.LoadAsset("产品族");
                audioAssistant.UnLoadResource(false);

                uiAssistant = rfAssistant.CreateUIManager();
                uiAssistant.LoadConfig("副城.");
                uiAssistant.LoadAsset("产品族");
                uiAssistant.UnLoadResource(false);
            }
        }
    }
}
